﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Globalization;
using Scommesse.Model;
using Scommesse.Utility;

namespace Scommesse.Presenters.Adapters
{
    internal class ScommessaAdapter : IComposite
    {
        private readonly Color _backColor;
        private readonly Font _font;
        private readonly Color _foreColor;
        private readonly ScommessaConfermata _scommessa;

        public ScommessaAdapter(ScommessaConfermata scommessa)
        {
            _scommessa = scommessa;
            _backColor = Color.Empty;
            _foreColor = Color.Empty;
        }

        public ScommessaAdapter(ScommessaConfermata scommessa, Font font)
        {
            _scommessa = scommessa;
            _backColor = Color.Empty;
            _foreColor = Color.Empty;
            _font = font;
        }

        public ScommessaAdapter(ScommessaConfermata scommessa, Color backColor, Color foreColor, Font font)
        {
            if (scommessa == null)
            {
                throw new ArgumentNullException("Scommessa!");
            }
            _scommessa = scommessa;
            _backColor = backColor;
            _foreColor = foreColor;
            _font = font;
        }

        #region IComposite Members

        public string FullName
        {
            get
            {
                string statoString = "";
                if (!_scommessa.Stato.Equals(StatoScommessaConfermata.InAttesa))
                    statoString = " | " + StringValueAttribute.GetStringValue(_scommessa.Stato);
                return "Data: " + String.Format("{0:dd/MM/yyyy HH:mm}", _scommessa.DataOra) + " | importo : " +
                       _scommessa.Importo.ToString("c", new CultureInfo("it-IT")) + " || " + " Possibile Vincita : " +
                       _scommessa.TotaleVincita.ToString("c", new CultureInfo("it-IT")) + statoString;
            }
        }

        public Color BackColor
        {
            get { return _backColor; }
        }

        public Color ForeColor
        {
            get { return _foreColor; }
        }

        public IEnumerable<IEntity> SubEntities
        {
            get
            {
                var subEntities = new List<IEntity>();
                foreach (Quota q in _scommessa.Puntate)
                {
                    if (q.GetEvento().Stato.Equals(StatoEvento.Terminato))
                    {
                        subEntities.Add(new PuntataAdapter(q, new Font("Verdana", 8, FontStyle.Italic)));
                    }
                    else
                    {
                        subEntities.Add(new PuntataAdapter(q, new Font("Verdana", 8, FontStyle.Regular)));
                    }
                }
                return subEntities;
            }
        }


        public Font Font
        {
            get { return _font; }
        }

        #endregion
    }
}